package com.sc.nft.mapper;

import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sc.nft.entity.SaasTask;
import com.sc.nft.entity.UserInfo;
import com.sc.nft.entity.dto.SaasTaskBasicsDTO;
import com.sc.nft.entity.dto.SaasTaskWebPageDTO;
import com.sc.nft.entity.dto.SaasUserTaskParticipatingTaskDTO;
import com.sc.nft.entity.vo.SaasTaskBasicsVO;
import com.sc.nft.entity.vo.SaasTaskWebPageVO;
import com.sc.nft.entity.vo.SaasUserTaskParticipatingTaskVO;
import com.sc.nft.enums.SaasTaskTypeEnum;
import org.apache.ibatis.annotations.Param;
import com.sc.nft.entity.SaasTask;

import java.util.List;
/**
 * 任务基础表(SaasTask)表数据库访问层
 *
 * @author 王伟成
 * @since 2024-01-11 15:07:57
 */
public interface SaasTaskMapper extends BaseMapper<SaasTask> {

    IPage<SaasTaskBasicsVO> pageBasics(Page mp, @Param("saasTaskBasicsDTO") SaasTaskBasicsDTO saasTaskBasicsDTO);
    /**
     * 用户saas任务前端分页获取数据
     *
     * @param mp
     * @param saasTaskWebPageDTO
     * @param userId
     * @param dao
     * @return
     */
    IPage<SaasTaskWebPageVO> saasTaskWebPage(Page mp, @Param("saasTaskWebPageDTO") SaasTaskWebPageDTO saasTaskWebPageDTO, @Param("userId") Long userId, @Param("dao") Boolean dao);

    /**
     * 用户参与的任务
     *
     * @param mp
     * @param saasUserTaskParticipatingTaskDTO
     * @param user
     * @return
     */
    IPage<SaasUserTaskParticipatingTaskVO> userParticipatingTask(Page mp, @Param("saasUserTaskParticipatingTaskDTO") SaasUserTaskParticipatingTaskDTO saasUserTaskParticipatingTaskDTO, @Param("user") UserInfo user);
    List<SaasTask> getByTaskTypeAndValid(@Param("taskType") Integer taskType, @Param("userId") Long userId);

    /**
     * 任务可用数量-1
     *
     * @param taskId
     * @param subtract
     * @return
     */
    Integer taskSubtract(@Param("taskId") Long taskId, @Param("subtract") Integer subtract);
    /**
     * 获取每日重置的任务
     *
     * @return
     */
    List<SaasTask> everydayTask();

    /**
     * 获取每周一重置任务
     *
     * @return
     */
    List<SaasTask> weeklyTask();

    /**
     * 获取星球任务列表
     *
     * @param mp
     * @return
     */
    IPage<SaasTaskWebPageVO> saasTaskStarWebPage(Page mp);
    /**
     * 星球任务基础列表
     * @param mp
     * @param saasTaskBasicsDTO
     * @return
     */
    IPage<SaasTaskBasicsVO> pageStar(Page mp, @Param("saasTaskBasicsDTO") SaasTaskBasicsDTO saasTaskBasicsDTO);

    Integer taskTypeExist(@Param("code") int code);
    /**
     * 获取所有saas未领取的任务id
     * @return
     */
    List<Long> getAllSaasUnclaimedTaskAwardId();


}
